import java.util.Scanner;

public class Demo04 {
    public static void main(String[] args) {
        // 测试年月日输入
//        System.out.print(date[0] + "年" + date[1] + "月" + date[2] + "日");
        // 测试月份输入合法性
//        System.out.println(daysOfMonth(date[0], date[1]));
//        judgeInput(date[0],date[1], date[2]);
//        System.out.println(daysOfMonth(date[0],date[1]));
        while (true) {
            int[] date = myDate();
            System.out.printf("%d 年 %d 月 %d 日排在一年中的第 %d 天", date[0], date[1], date[2], daysOfYear(date));
            System.out.println();
        }
    }

    /**
     * 用户输入年月日
     *
     * @return date[0]年份 date[1]月份 date[2]日期
     */
    private static int[] myDate() {
        int[] date = new int[3];
        System.out.println("请输入年份：");
        date[0] = new Scanner(System.in).nextInt();
        System.out.println("请输入月份：");
        date[1] = new Scanner(System.in).nextInt();
        System.out.println("请输入日期：");
        date[2] = new Scanner(System.in).nextInt();
        return date;
    }

    /**
     * 判断闰年
     *
     * @param year 输入年份
     * @return true闰年  false平年
     */
    private static boolean judgeLeapYear(int year) {
//        if ((date[0] % 4 == 0 && date[0] % 100 != 0) || date[0] % 400 == 0) {
//            return true;
//        }else {
//            return false;
//        }
        return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
    }

    /**
     * 判断月份天数
     *
     * @param year  输入年份
     * @param month 输入月份
     * @return 返回月份天数res
     */
    private static int daysOfMonth(int year, int month) {
        int res;
        switch (month) {
            case 1: case 3: case 5: case 7: case 8: case 10: case 12:
                res = 31;
                return res;
            case 4: case 6: case 9: case 11:
                res = 30;
                return res;
            case 2:
                if (judgeLeapYear(year)) {
                    res = 29;
                } else {
                    res = 28;
                }
                return res;
            default:
                System.out.println("月份输入非法");
                System.exit(-1);
                return -1;
        }
    }

    /**
     * 判断输入合法性
     *
     * @param year  年份
     * @param month 月份
     * @param days  日期
     */
    private static void judgeInput(int year, int month, int days) {
        if (year < 0) {
            System.out.println("年份输入非法！");
            System.exit(-1);
        }
        if (days < 1 || days > daysOfMonth(year, month)) {
            System.out.println("日期输入非法！");
            System.exit(-1);
        }
    }

    /**
     * 计算日期在一年中的第几天
     *
     * @param date 输入日期
     * @return 返回日期在一年中的第几天
     */
    private static int daysOfYear(int[] date) {
        daysOfMonth(date[0], date[1]);
        judgeInput(date[0], date[1], date[2]);
        int sum = date[2];
        for (int i = date[1] - 1; i > 0; i--) {
            sum += daysOfMonth(date[0], i);
        }
        return sum;
    }
}